//********************************************************************************
/*以下是参考 C 代码*/
#include <oxygen_ml.h>

/**
 * @description: 计算 DO（mg/L），即把 DO（%）转化成 DO（mg/L）
 * @param {float} do_data
 * @return {*}
 */
float do_ml_switch(float do_data,float temp)
{
    float X1, X1_1, u, u_1, X2;
    float pressure = 101.325; // 标准大气压（根据实际情况填写）
    float Phmg = 0.00;
    float t = temp; // 根据实际情况填写
    float T = 0.00;
    float S = 0.00;
    static float value = 0.00;
    T = 273.15 + t;                                         // t 为当前温度
    X1_1 = -173.4292                                        // X1’ = ln X1 根据以上的经典公式
           + 249.6339 * (100 / T) + 143.3483 * log(T / 100) // log()函数即 ln(x)
           + -21.8492 * (T / 100) + S * (-0.033096 + (0.014259 * T) / 100 - 0.001700 * (T / 100) * (T / 100));
    X1 = exp(X1_1); // 自然对数
    // log u = 8.10765 - (1750.286/ (235+t))
    u_1 = 8.10765 - (1750.286 / (235 + t)); // u’ = log u
    u = pow(10, u_1);                       // u=10^u’
    Phmg = pressure * 760 / 101.325;
    X2 = ((Phmg - u) / (760 - u));
    // DO(mg/L)= DO(%)*X1*X2*1.4276;
    value = do_data * X1 * X2 * 1.4276;
    return value;
}

//***********************************************************************************